The latency (time spent waiting) for memory access, both to write to memory and to read from memory, is often a problem for software programs. In current computers, processor cycles are much shorter than the time for memory access. Further, the problem is becoming more severe. Processor speed is increasing exponentially, and memory access is increasing only gradually.
One partial remedy to the problem of memory access latency is a hierarchy of memories. The main memory has a large capacity and is slowest. On top of this are several layers of successively smaller, faster memories, or caches.
The current use of caches presents problems. A read from a cache may fail when the cache does not contain the desired data. The data must then be accessed from the slow main memory. An attempt to write data exclusively to a cache may not be permitted. The transfer of data from an I/O device, from a network, or from a disk may require may require the data to be written to main memory, either exclusively or also to local memory or to a cache. In either case, there is the latency of writing to the slower main memory. Further, there can be a latency in accessing the data. In the first case, the processor must access the data from the main memory for processing, with the resultant latency of access. In the second case, the data written to a cache may be replaced by other data before the replaced data is accessed. When this occurs, the replaced data is written to main memory. To then utilize this data, a processor must access it from main memory.
Therefore, there is a need for a method of storing data from a processor, an I/O device, a network or a disk to a cache or other fast memory without also storing it to main memory. Further, the method must guarantee that the data remains in the cache or other fast memory until it has been used.